import {Observable} from 'rxjs/Observable';
import {HttpParams} from '@angular/common/http';
import {HttpClientService, MyResponse} from './http-client.service';
import {PubSubEvent} from '../pub-sub/pub-sub.event';
import {AppContextService} from './app-context.service';
import {StorageService} from './storage.service';
import {Pager} from '../model/pager.model';
import {Injectable} from '@angular/core';
import {AppConfigService} from './app-config.service';
import {PageButton} from '../model/page-button.model';
import {PageConfig} from '../model/page-config.model';

@Injectable()
export class PageService {

  title: string;  // 页面标题
  subUrl: string;  // 子url

  pConfig: any;   // 配置信息
  pConfigEvent: PubSubEvent;
  isLoadPConfig: boolean;   // 是否已加载

  pDictionaries: any;    // 字典信息
  pDictionariesEvent: PubSubEvent;
  isLoadPDictionaries: boolean;

  pButtons: any;   // 按钮信息
  pButtonsEvent: PubSubEvent;
  isLoadPButtons: boolean;

  pParams: any;           // 查询参数信息
  pParamsEvent: PubSubEvent;
  isLoadPParams: boolean;

  list: any;          // 列表信息
  listEvent: PubSubEvent;
  isLoadList: boolean;
  // pager: Pager= new Pager();

  constructor(
    public app: AppContextService,
    public http: HttpClientService,
    public session: StorageService,
    public config: AppConfigService,
    // @Inject(ISCRUD) public isCRUD: boolean=true,
    // public url: UrlBase
  ) {
    this.pButtonsEvent = new PubSubEvent();
    this.pDictionariesEvent = new PubSubEvent();
    this.pConfigEvent = new PubSubEvent();
    this.pParamsEvent = new PubSubEvent();

    // 列表分页信息
    // this.pager.init(this.config.pager);

    // 加载按钮
    // this.pButtonsEvent.subscribe((data)=>{
    //   this.pButtons=data;
    // });
    // this.pConfigEvent.subscribe(data=>{
    //   this.pConfig=data;
    // });
    // this.pParamsEvent.subscribe(data=>{
    //   this.pParams=data;
    // })
    // this.pDictionariesEvent.subscribe(data=>{
    //   this.pDictionaries=data;
    // });
  }
  //
  // initTable(pageIndex, params?: any, data?: any): Observable<any> {
  //   if (params == null) {
  //     if (typeof this.subUrl !== 'undefined' && this.subUrl !== '') {
  //       params = new HttpParams()
  //         .set('pageindex', `${pageIndex}`)
  //         .set('pagesize', `${this.pager.pageSize}`)
  //         .set('plantItemType', `${this.subUrl.toLowerCase()}`);
  //     } else {
  //       params = new HttpParams()
  //         .set('pageindex', `${pageIndex}`)
  //         .set('pagesize', `${this.pager.pageSize}`);
  //     }
  //
  //   }
  //   return this.http.get(this.url.pageList, params );
  // }
  // initList(params?: any, data?: any): Observable<any> {
  //   if (params == null) {
  //     params = new HttpParams()
  //       .set('isPage', `${false}`)
  //       .set('isPage', `${false}`);
  //   }
  //   return this.http.get(this.url.pageList, params);
  // }
  // initButton(): Observable<any> {
  //   let listBtnData = [];
  //   if (this.session.menuCurr) {
  //     const currModule = this.session.menuCurr;
  //     if (currModule && currModule['functions'] && currModule['functions'].length > 0){
  //       const buttonData = currModule['functions'];
  //       // listBtnData=buttonData.filter(m=>m.layout.indexOf('list')>=0);
  //       listBtnData = buttonData;
  //     }
  //   }
  //   const buttons = new PageButton();
  //   // buttons.listTopButtons = listBtnData.filter(m => m.layout === 'top');
  //   // buttons.listRowButtons = listBtnData.filter(m => m.layout === 'row');
  //   // buttons.hasRowButtons = buttons.listRowButtons.length > 0 ? true : false;
  //   // this.buttons=buttons;
  //
  //   return Observable.create((observer) => {
  //     observer.next(buttons);
  //   });
  // }
  // initDictionary(_url?: string, _tableName?: string): Observable<any> {
  //   const url = _url ? _url : this.url.dictionary;
  //   const tableName = _tableName ? _tableName : this.url.controllerString;
  //   const params = new HttpParams().set('tablename', tableName);
  //   return this.http.get(url, params);
  // }
  // // 加载配置信息
  // initConfig(): Observable<any> {
  //   let controll = this.url.controllerString;
  //   if (typeof this.subUrl !== 'undefined') {
  //     controll += this.subUrl;
  //   }
  //   const url = this.config.getConfigName(controll);
  //   return this.http.getFile(url);
  // }
  //
  // newCode(id?: string, type?: string): Observable<MyResponse> {
  //   const url = this.url.urlNewCode(id, type);
  //   return this.http.get(url);
  // }
  // // 处理配置消息
  // handleConfig(data): PageConfig {
  //   data.formErrors = {};
  //   data.formErrorKeys = [];
  //   data.notInFormErrorKey = [];
  //   data.vMessages = {};
  //   const fields = data.fields;
  //
  //   if (data.fields) {
  //     data.property = [];
  //     fields.forEach(field => {
  //       data.property[field.name] = field;
  //     });
  //   }
  //   for (const item in data.property) {
  //     const pro = data.property[item];
  //     if (pro['validates'] && pro['validates'].length > 0) {
  //       data.formErrors[item] = '';
  //       data.formErrorKeys.push(item);
  //       data.vMessages[item] = [];
  //       pro['validates'].forEach(val => {
  //         data.vMessages[item][val] = `[${[pro.title]}] ${this.config.validateMessages[val]}`;
  //       });
  //     }
  //     if (pro['notInForm']) {  // 不在form表单中的控件,即自己写的组件
  //       data.notInFormErrorKey.push(item);
  //     }
  //   }
  //   return data;
  // }
  //
  // handleDictionary(data) {
  //   const pageDic = new Map();
  //   if (data == null) { return; }
  //   if (data.dicconfiglist) {
  //     data.dicconfiglist.forEach(item => {
  //       const valueItem: Dictionary[] = [];
  //       if (item.isDictionaryData && data.diclist != null) {
  //         const idiclist = data.diclist.filter(m => m.useForField === item.fieldName);
  //         if (idiclist.length > 0) {
  //           idiclist.forEach(i => valueItem.push(i));
  //         }
  //       }
  //       if (!item.isDictionaryData && data.otherdiclist != null) {
  //         // console.log(data.otherdiclist);
  //         const iotherdiclist = data.otherdiclist.filter(m => m.useForField === item.fieldName);
  //         if (iotherdiclist.length > 0) {
  //           iotherdiclist.forEach(i => valueItem.push(i));
  //         }
  //       }
  //       pageDic.set(item.fieldName, valueItem);
  //     });
  //   }
  //   return pageDic;
  // }
  //
  // handleSearchParams([model, form]): any {
  //   let queryString = '';
  //   for (const field in model) {
  //     if (model[field] != null && model[field] !== '') {
  //       queryString += queryString.length > 0
  //         ? `&${field}=${model[field]}`
  //         : `${field}=${model[field]}`;
  //     }
  //   }
  //   const params = new HttpParams({fromString: queryString});
  //   return params;
  // }
  //
  // showMsg(type?: number, msg?: string) {
  //   const typeStr = type == null ? '0' : type.toString();
  //   switch (typeStr) {
  //     case '1':
  //       this.app.msg.error(msg);
  //       break;
  //     case '2':
  //       this.app.msg.success('操作成功!');
  //       break;
  //     default:
  //       this.app.msg.info(msg);
  //   }
  // }
  //
  //
  // post(model): Observable<any> {
  //   return this.http.post(this.url.post, model);
  // }
  // get(id: string): Observable<any> {
  //   return this.app.http.get(this.url.urlGet(id));
  // }
  // add() {
  //
  // }
  //
  // edit(item) {
  //   // this.app.dialog()
  // }
  // deleteEntity(id: any) {
  //   return this.app.http.delete(this.url.urlDelete(id));
  // }
  // deleteEntitys(ids: any) {
  //   return this.app.http.post(this.url.urlPostDelete(), ids);
  // }

  // delete(item){
  //   this.app.confirmDelete(item)
  //     .subscribe((isConfirmed)=> {
  //       if(isConfirmed){
  //         this.app.http.delete(item.id)
  //           .map(res=>res.json())
  //           .subscribe((res:MyResponse)=>{
  //             if(res.success){
  //               let index=this.list.findIndex(m=>m==item);
  //               this.list.splice(index,1);
  //             }
  //             this.app.msg.info(res.message);
  //           });
  //       }});
  // }


}
